package design.patterns.structural;

/**
 * 外观模式
 * 解释：
 * 外观模式是一种结构型设计模式，
 * 能为程序库、 框架或其他复杂类提供一个简单的接口。
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 情景
 * 包租婆 收房租时，需要通知所有的租户，很累
 * 于是叫包租公去收租
 * 包租公收完后，交给包租婆，包租婆就很轻松啦
 *
 * 包租婆  --> 【巨多的】租户
 *         |
 *        \
 *         V
 *
 * 包租婆  --> 包租公  --> 【巨多的】租户
 *
 * 包租婆简直不要太爽
 */
public class E_Facade {}

class Renter{
    private String name;

    public Renter(String name) {
        this.name = name;
    }

    void pay(){
        System.out.println("支付租金");
    }

    public String getName() {
        return name;
    }
}

class Landlady{

    private List<Renter> renterList =new ArrayList<>();

    public Landlady(Renter ...renterList) {
        this.renterList.addAll(Arrays.asList(renterList));
    }

    void collectRent(){
        for (Renter renter : this.renterList) {
            System.out.println(this.getClass().getSimpleName()+" 通知: "+renter.getName()+" 收租");
        }
    }
}